package com.demo.jzoffer2;

import com.demo.domain.TreeNode;
import org.junit.Test;

/**
 * @author gy
 * @date 2023/02
 */
public class Test0209_01 {
    /**
     * 输入一棵二叉树的根节点，判断该树是不是平衡二叉树。
     * 如果某二叉树中任意节点的左右子树的深度相差不超过1，那么它就是一棵平衡二叉树。
     * @param root
     * @return
     */
    public boolean isBalanced(TreeNode root) {
        // 思路分析：先序遍历 + 判断深度
        // 平衡二叉树的条件：Math.abs(左子树的深度 - 右子树的深度) <= 1 等于 0 的时候为，完全平衡二叉树
        // 同时 左右子树也都是平衡二叉数
        if (root == null){
            return true;
        }
        return Math.abs(depth(root.left)-depth(root.right)) <= 1 && isBalanced(root.left) && isBalanced(root.right);
    }

    // 计算二叉树的深度：Math.max(左子树的深度，右子树的深度) + 1 ;
    private int depth(TreeNode root){
        if (root == null){
            return 0;
        }
        return Math.max(depth(root.left),depth(root.right)) + 1;
    }


    @Test
    public void m1() {
    }

    @Test
    public void m2() {

    }

}
